package model

import (
	"time"
	"user_srv/basic/config"
)

// 用户资料表
type XqUserProfiles struct {
	Id        int64     `gorm:"column:id;type:bigint;primaryKey;not null;" json:"id"`
	UserId    int64     `gorm:"column:user_id;type:bigint;comment:用户ID;not null;" json:"user_id"`          // 用户ID
	Nickname  string    `gorm:"column:nickname;type:varchar(50);comment:昵称;not null;" json:"nickname"`     // 昵称
	Age       int32     `gorm:"column:age;type:int;comment:年龄;" json:"age"`                                // 年龄
	Gender    int8      `gorm:"column:gender;type:tinyint(1);comment:性别 1:男 2:女;" json:"gender"`           // 性别
	Avatar    string    `gorm:"column:avatar;type:varchar(255);comment:头像URL;" json:"avatar"`              // 头像
	Bio       string    `gorm:"column:bio;type:text;comment:个人简介;" json:"bio"`                             // 个人简介
	Location  string    `gorm:"column:location;type:varchar(100);comment:位置信息;" json:"location"`           // 位置信息
	Latitude  float64   `gorm:"column:latitude;type:double;comment:纬度;" json:"latitude"`                   // 纬度
	Longitude float64   `gorm:"column:longitude;type:double;comment:经度;" json:"longitude"`                 // 经度
	IsActive  int8      `gorm:"column:is_active;type:tinyint(1);comment:是否启用;default:1;" json:"is_active"` // 是否启用
	CreatedAt time.Time `gorm:"column:created_at;type:timestamp;default:CURRENT_TIMESTAMP;" json:"created_at"`
	UpdatedAt time.Time `gorm:"column:updated_at;type:timestamp;default:CURRENT_TIMESTAMP;" json:"updated_at"`
}

func (x *XqUserProfiles) TableName() string {
	return "xq_user_profiles"
}

func (x *XqUserProfiles) Create() error {
	return config.DB.Create(&x).Error
}

func (x *XqUserProfiles) Delete(where XqUserProfiles) error {
	return config.DB.Where(where).Delete(&x).Error
}

func (x *XqUserProfiles) Update(where XqUserProfiles) error {
	return config.DB.Where(where).Updates(&x).Error
}

func (x *XqUserProfiles) GetByUserId(userId int64) (*XqUserProfiles, error) {
	var profile XqUserProfiles
	err := config.DB.Where("user_id = ? AND is_active = 1", userId).First(&profile).Error
	return &profile, err
}

func (x *XqUserProfiles) List(where XqUserProfiles, limit, offset int) ([]XqUserProfiles, error) {
	var profiles []XqUserProfiles
	query := config.DB.Where(where)
	if limit > 0 {
		query = query.Limit(limit)
	}
	if offset > 0 {
		query = query.Offset(offset)
	}
	err := query.Find(&profiles).Error
	return profiles, err
}
